package models

type TseBaseRequest struct {
	EngineVersion        string `json:"engine_version"`         // 产品版本 2.0.3
	EngineProductVersion string `json:"engine_product_version"` // 引擎的产品版本 STANDARD： 标准版
	GoodsSpec            string `json:"goods_spec"`             // 商品规格 1C2G
	EngineNodeNum        int64  `json:"engine_node_num"`        // 实例节点数 3
	EngineName           string `json:"engine_name"`            // 实例名称
	VpcId                string `json:"vpc_id"`
	SubnetId             string `json:"subnet_id"`
}

type NacosResponse struct {
	TseBaseResponse
}

type TseBaseResponse struct {
	InstanceId            string                `json:"InstanceId,omitnil" name:"InstanceId"`                       // 实例ID
	Name                  string                `json:"Name,omitnil" name:"Name"`                                   // 实例名称
	EngineVesion          string                `json:"EngineVesion,omitnil" name:"EngineVesion"`                   // 实例版本号
	Status                string                `json:"Status,omitnil" name:"Status"`                               // 状态, 枚举值:creating/create_fail/running/updating/update_fail/restarting/restart_fail/destroying/destroy_fail
	SpecId                string                `json:"SpecId,omitnil" name:"SpecId"`                               // 规格ID
	Replica               int64                 `json:"Replica,omitnil" name:"Replica"`                             // 副本数
	EngineType            string                `json:"EngineType,omitnil" name:"EngineType"`                       // 引擎类型， nacos, apollo
	VpcId                 string                `json:"VpcId,omitnil" name:"VpcId"`                                 // Vpc iD
	SubnetId              string                `json:"SubnetId"`                                                   // 子网id
	Paymode               string                `json:"Paymode,omitnil" name:"Paymode"`                             // 计费方式 此字段可能返回 null，表示取不到有效值。
	EKSClusterID          string                `json:"EKSClusterID,omitnil" name:"EKSClusterID"`                   // EKS集群的ID 此字段可能返回 null，表示取不到有效值。
	CreateTime            string                `json:"CreateTime,omitnil" name:"CreateTime"`                       // 集群创建时间， 此字段可能返回 null，表示取不到有效值。
	EngineRegion          string                `json:"EngineRegion,omitnil" name:"EngineRegion"`                   // 引擎所在的区域， 此字段可能返回 null，表示取不到有效值。
	EnableInternet        bool                  `json:"EnableInternet,omitnil" name:"EnableInternet"`               // 注册引擎是否开启公网， 此字段可能返回 null，表示取不到有效值。
	EnableConsoleInternet bool                  `json:"EnableConsoleInternet,omitnil" name:"EnableConsoleInternet"` // 引擎实例是否开启控制台公网访问地址
	EnableConsoleIntranet bool                  `json:"EnableConsoleIntranet,omitnil" name:"EnableConsoleIntranet"` // 引擎实例是否开启控制台内网访问地址
	ConfigInfoVisible     bool                  `json:"ConfigInfoVisible,omitnil" name:"ConfigInfoVisible"`
	ConsoleDefaultPwd     string                `json:"ConsoleDefaultPwd,omitnil" name:"ConsoleDefaultPwd"`       // 引擎实例控制台默认密码 此字段可能返回 null，表示取不到有效值。
	TradeType             int64                 `json:"TradeType,omitnil" name:"TradeType"`                       // 交易付费类型，0后付费/1预付费 此字段可能返回 null，表示取不到有效值。
	AutoRenewFlag         int64                 `json:"AutoRenewFlag,omitnil" name:"AutoRenewFlag"`               // 自动续费标记：0表示默认状态(用户未设置，即初始状态)， 1表示自动续费，2表示明确不自动续费 此字段可能返回 null，表示取不到有效值。
	CurDeadline           string                `json:"CurDeadline,omitnil" name:"CurDeadline"`                   // 预付费到期时间 此字段可能返回 null，表示取不到有效值。
	IsolateTime           string                `json:"IsolateTime,omitnil" name:"IsolateTime"`                   // 隔离开始时间 此字段可能返回 null，表示取不到有效值。
	ProductVersion        string                `json:"ProductVersion,omitnil" name:"ProductVersion"`             // 引擎的产品版本 此字段可能返回 null，表示取不到有效值。
	EnableClientIntranet  bool                  `json:"EnableClientIntranet,omitnil" name:"EnableClientIntranet"` // 引擎实例是否开启客户端内网访问地址 此字段可能返回 null，表示取不到有效值。
	InstanceAccessAddress InstanceAccessAddress `json:"InstanceAccessAddress"`
}

type InstanceAccessAddress struct {
	IntranetAddress          string `json:"IntranetAddress,omitnil" name:"IntranetAddress"`                   // 内网访问地址
	InternetAddress          string `json:"InternetAddress,omitnil" name:"InternetAddress"`                   // 公网访问地址
	ConsoleInternetAddress   string `json:"ConsoleInternetAddress,omitnil" name:"ConsoleInternetAddress"`     // 控制台公网访问地址 此字段可能返回 null，表示取不到有效值。
	ConsoleIntranetAddress   string `json:"ConsoleIntranetAddress,omitnil" name:"ConsoleIntranetAddress"`     // 控制台内网访问地址 此字段可能返回 null，表示取不到有效值。
	InternetBandWidth        int64  `json:"InternetBandWidth,omitnil" name:"InternetBandWidth"`               // 客户端公网带宽 此字段可能返回 null，表示取不到有效值。
	ConsoleInternetBandWidth int64  `json:"ConsoleInternetBandWidth,omitnil" name:"ConsoleInternetBandWidth"` // 控制台公网带宽 注意：此字段可能返回 null，表示取不到有效值。
	RequestId                string `json:"RequestId,omitnil" name:"RequestId"`                               // 唯一请求 ID，每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
}

type ApolloResponse struct {
	TseBaseResponse
	EnvInfos []ApolloEnvInfo `json:"env_infos"`
}

type ApolloEnvInfo struct {
	EnvName                 string    `json:"EnvName,omitnil" name:"EnvName"`                                 // 环境名称
	VpcInfos                []VpcInfo `json:"VpcInfos,omitnil" name:"VpcInfos"`                               // 环境对应的网络信息
	StorageCapacity         int64     `json:"StorageCapacity,omitnil" name:"StorageCapacity"`                 // 云硬盘容量
	Status                  string    `json:"Status,omitnil" name:"Status"`                                   // 运行状态
	AdminServiceIp          string    `json:"AdminServiceIp,omitnil" name:"AdminServiceIp"`                   // Admin service 访问地址
	ConfigServiceIp         string    `json:"ConfigServiceIp,omitnil" name:"ConfigServiceIp"`                 // Config service访问地址
	EnableConfigInternet    bool      `json:"EnableConfigInternet,omitnil" name:"EnableConfigInternet"`       // 是否开启config-server公网
	ConfigInternetServiceIp string    `json:"ConfigInternetServiceIp,omitnil" name:"ConfigInternetServiceIp"` // config-server公网访问地址
	ResourceSpec            string    `json:"ResourceSpec"`                                                   // 实例规格
	SpecId                  string    `json:"SpecId,omitnil" name:"SpecId"`                                   // 规格ID
	EnvReplica              int64     `json:"EnvReplica,omitnil" name:"EnvReplica"`                           // 环境的节点数
	RunningCount            int64     `json:"RunningCount,omitnil" name:"RunningCount"`                       // 环境运行的节点数
	AliasEnvName            string    `json:"AliasEnvName,omitnil" name:"AliasEnvName"`                       // 环境别名
	EnvDesc                 string    `json:"EnvDesc,omitnil" name:"EnvDesc"`                                 // 环境描述
	ClientBandWidth         uint64    `json:"ClientBandWidth,omitnil" name:"ClientBandWidth"`                 // 客户端带宽
	EnableConfigIntranet    bool      `json:"EnableConfigIntranet,omitnil" name:"EnableConfigIntranet"`       // 客户端内网开关 此字段可能返回 null，表示取不到有效值。
}

type ApolloRequest struct {
	EngineVersion string             `json:"engine_version"` // 产品版本 2.0.3
	EngineName    string             `json:"engine_name"`    // 实例名称
	EnvInfos      []ApolloEnvRequest `json:"env_infos"`
	EngineAdmin   ApolloAdmin        `json:"engine_admin"`
}

type ApolloAdmin struct {
	Name     string `json:"name"`     // 控制台初始用户名
	Password string `json:"password"` // 初始化密码
	Token    string `json:"token"`    // 引擎接口的管理员 Token
}

type ApolloEnvRequest struct {
	Name               string `json:"name"`               // 环境名称
	EngineResourceSpec string `json:"engineResourceSpec"` // 资源规格
	EngineNodeNum      int64  `json:"engineNodeNum"`      // 节点数
	StorageCapacity    int64  `json:"storageCapacity"`    // 磁盘大小，单位GB
	VpcId              string `json:"vpcId"`              // vpc私有网络id号
	SubnetId           string `json:"subnetId"`           // 子网id号
	EnvDesc            string `json:"envDesc"`            // 环境描述信息
}

type EurekaRequest struct {
	EngineVersion string `json:"engine_version"`  // 产品版本 1.10.11
	GoodsSpec     string `json:"goods_spec"`      // 商品规格 1C2G
	EngineNodeNum int64  `json:"engine_node_num"` // 实例节点数 3
	EngineName    string `json:"engine_name"`     // 实例名称
	VpcId         string `json:"vpc_id"`
	SubnetId      string `json:"subnet_id"`
}

type RabbitMQItem struct {
	InstanceId           string `json:"InstanceId,omitnil" name:"InstanceId"`                     // 实例id
	InstanceName         string `json:"InstanceName,omitnil" name:"InstanceName"`                 // 实例名称
	InstanceVersion      string `json:"InstanceVersion,omitnil" name:"InstanceVersion"`           // 实例版本
	Status               uint64 `json:"Status,omitnil" name:"Status"`                             // 实例状态，0表示创建中，1表示正常，2表示隔离中，3表示已销毁，4 - 异常, 5 - 发货失败
	NodeCount            uint64 `json:"NodeCount,omitnil" name:"NodeCount"`                       // 节点数量
	ConfigDisplay        string `json:"ConfigDisplay,omitnil" name:"ConfigDisplay"`               // 实例配置规格名称
	MaxTps               uint64 `json:"MaxTps,omitnil" name:"MaxTps"`                             // 峰值TPS
	MaxBandWidth         uint64 `json:"MaxBandWidth,omitnil" name:"MaxBandWidth"`                 // 峰值带宽，Mbps为单位
	MaxStorage           uint64 `json:"MaxStorage,omitnil" name:"MaxStorage"`                     // 存储容量，GB为单位
	ExpireTime           uint64 `json:"ExpireTime,omitnil" name:"ExpireTime"`                     // 实例到期时间，毫秒为单位
	AutoRenewFlag        uint64 `json:"AutoRenewFlag,omitnil" name:"AutoRenewFlag"`               // 自动续费标记，0表示默认状态(用户未设置，即初始状态即手动续费)， 1表示自动续费，2表示明确不自动续费(用户设置)
	PayMode              uint64 `json:"PayMode,omitnil" name:"PayMode"`                           // 0-后付费，1-预付费
	Remark               string `json:"Remark,omitnil" name:"Remark"`                             // 备注信息
	SpecName             string `json:"SpecName,omitnil" name:"SpecName"`                         // 实例配置ID
	ExceptionInformation string `json:"ExceptionInformation,omitnil" name:"ExceptionInformation"` // 集群异常。
	ClusterStatus        int64  `json:"ClusterStatus,omitnil" name:"ClusterStatus"`               // 实例状态，0表示创建中，1表示正常，2表示隔离中，3表示已销毁，4 - 异常, 5 - 发货失败 为了和计费区分开，额外开启一个状态位，用于显示。
}

type RabbitMQRequest struct {
	NodeSpec    string  `json:"node_spec"`    // 节点规格,基础型rabbit-vip-basic-1,标准型rabbit-vip-basic-2,高阶1型rabbit-vip-basic-3,高阶2型rabbit-vip-basic-4。不传默认为基础型
	NodeNum     int64   `json:"node_num"`     // 节点数量,多可用区最少为3节点。不传默认单可用区为1,多可用区为3
	StorageSize int64   `json:"storage_size"` // 单节点存储规格,不传默认为200G
	VpcId       string  `json:"vpc_id"`
	SubnetId    string  `json:"subnet_id"`
	ClusterName string  `json:"cluster_name"` // 集群名称
	TimeSpan    int64   `json:"time_span"`    // 购买时长, 默认1个月
	ZoneIds     []int64 `json:"zone_ids"`     // 可用区，
}

type RabbitMQUser struct {
	InstanceId  string `json:"InstanceId,omitnil" name:"InstanceId"`   // 集群实例Id
	User        string `json:"User,omitnil" name:"User"`               // 用户名，登录时使用
	Password    string `json:"Password,omitnil" name:"Password"`       // 密码，登录时使用
	Description string `json:"Description,omitnil" name:"Description"` // 用户描述
	CreateTime  string `json:"CreateTime,omitnil" name:"CreateTime"`   // 用户创建时间
	ModifyTime  string `json:"ModifyTime,omitnil" name:"ModifyTime"`   // 用户最后修改时间
	Type        string `json:"Type,omitnil" name:"Type"`               // 用户类型，System：系统创建，User：用户创建
}

type RocketMQRequest struct {
	InstanceType     string `json:"instance_type"` // EXPERIMENT 体验版 	BASIC 基础版	PRO  专业版	PLATINUM 铂金版
	Name             string `json:"name"`          //实例名称
	SkuCode          string `json:"sku_code"`      // 商品规格，可用规格如下：experiment_500,basic_1k,basic_2k,basic_4k,basic_6k
	VpcId            string `json:"vpc_id"`
	SubnetId         string `json:"subnet_id"`
	Remark           string `json:"remark"`            // 说明
	MessageRetention int64  `json:"message_retention"` // 消息保留时长
}

type RocketMQItem struct {
	InstanceId       string `json:"InstanceId,omitnil" name:"InstanceId"`             // 实例ID
	InstanceName     string `json:"InstanceName,omitnil" name:"InstanceName"`         // 实例名称
	Version          string `json:"Version,omitnil" name:"Version"`                   // 实例版本
	InstanceType     string `json:"InstanceType,omitnil" name:"InstanceType"`         // 实例类型， EXPERIMENT，体验版 BASIC，基础版 PRO，专业版 PLATINUM，铂金版
	InstanceStatus   string `json:"InstanceStatus,omitnil" name:"InstanceStatus"`     // 实例状态， RUNNING, 运行中 MAINTAINING，维护中 ABNORMAL，异常 OVERDUE，欠费 DESTROYED，已删除 CREATING，创建中 MODIFYING，变配中 CREATE_FAILURE，创建失败 MODIFY_FAILURE，变配失败 DELETING，删除中
	TopicNumLimit    int64  `json:"TopicNumLimit,omitnil" name:"TopicNumLimit"`       // 实例主题数上限
	GroupNumLimit    int64  `json:"GroupNumLimit,omitnil" name:"GroupNumLimit"`       // 实例消费组数量上限
	PayMode          string `json:"PayMode,omitnil" name:"PayMode"`                   // 计费模式， POSTPAID，按量计费 PREPAID，包年包月
	ExpiryTime       int64  `json:"ExpiryTime,omitnil" name:"ExpiryTime"`             // 到期时间，秒为单位
	Remark           string `json:"Remark,omitnil" name:"Remark"`                     // 备注信息
	TopicNum         int64  `json:"TopicNum,omitnil" name:"TopicNum"`                 // 主题数量
	GroupNum         int64  `json:"GroupNum,omitnil" name:"GroupNum"`                 // 消费组数量
	SkuCode          string `json:"SkuCode,omitnil" name:"SkuCode"`                   // 商品规格
	TpsLimit         int64  `json:"TpsLimit,omitnil" name:"TpsLimit"`                 // TPS限流值
	ScaledTpsLimit   int64  `json:"ScaledTpsLimit,omitnil" name:"ScaledTpsLimit"`     // 弹性TPS限流值
	MessageRetention int64  `json:"MessageRetention,omitnil" name:"MessageRetention"` // 消息保留时间，小时为单位
	MaxMessageDelay  int64  `json:"MaxMessageDelay,omitnil" name:"MaxMessageDelay"`   // 延迟消息最大时长，小时为单位
}

type RocketMQRequestV4 struct {
	Name        string `json:"name"`        // 名称
	Spec        string `json:"spec"`        // 规格 基础型，rocket-vip-basic-1 标准型，rocket-vip-basic-2	高阶Ⅰ型，rocket-vip-basic-3	高阶Ⅱ型，rocket-vip-basic-4
	NodeCount   int64  `json:"nodeCount"`   // 节点数
	StorageSize int64  `json:"storageSize"` // 存储大小
	ZoneId      string `json:"zoneId"`      // 区域id, 如上海一区200001,广州一区100001
	VpcId       string `json:"vpcId"`       // vpc id
	SubnetId    string `json:"subnetId"`    // 子网id
	TimeSpan    int64  `json:"timeSpan"`    // 购买时长，最少1个月
}

type RocketMQItemV4 struct {
	ClusterId                string `json:"ClusterId,omitnil" name:"ClusterId"`
	ClusterName              string `json:"ClusterName,omitnil" name:"ClusterName"`                           // 集群名称
	Region                   string `json:"Region,omitnil" name:"Region"`                                     // 地域信息
	CreateTime               uint64 `json:"CreateTime,omitnil" name:"CreateTime"`                             // 创建时间，毫秒为单位
	Remark                   string `json:"Remark,omitnil" name:"Remark"`                                     // 集群说明信息
	PublicEndPoint           string `json:"PublicEndPoint,omitnil" name:"PublicEndPoint"`                     // 公网接入地址
	VpcEndPoint              string `json:"VpcEndPoint,omitnil" name:"VpcEndPoint"`                           // VPC接入地址
	SupportNamespaceEndpoint bool   `json:"SupportNamespaceEndpoint,omitnil" name:"SupportNamespaceEndpoint"` // 是否支持命名空间接入点
	IsVip                    bool   `json:"IsVip,omitnil" name:"IsVip"`                                       // 是否为专享实例
	RocketMQFlag             bool   `json:"RocketMQFlag,omitnil" name:"RocketMQFlag"`                         // Rocketmq集群标识
	Status                   int64  `json:"Status,omitnil" name:"Status"`                                     // 计费状态，1表示正常，2表示已停服，3表示已销毁
	IsolateTime              int64  `json:"IsolateTime,omitnil" name:"IsolateTime"`                           // 欠费停服时间，毫秒为单位
	HttpPublicEndpoint       string `json:"HttpPublicEndpoint,omitnil" name:"HttpPublicEndpoint"`             // HTTP协议公网接入地址
	HttpVpcEndpoint          string `json:"HttpVpcEndpoint,omitnil" name:"HttpVpcEndpoint"`                   // HTTP协议VPC接入地址
	InternalEndpoint         string `json:"InternalEndpoint,omitnil" name:"InternalEndpoint"`                 // TCP内部接入地址
	HttpInternalEndpoint     string `json:"HttpInternalEndpoint"`                                             // HTTP协议内部接入地址
	MaxTpsPerNamespace       uint64 `json:"MaxTpsPerNamespace,omitnil" name:"MaxTpsPerNamespace"`
	MaxNamespaceNum          uint64 `json:"MaxNamespaceNum,omitnil" name:"MaxNamespaceNum"`     // 最大命名空间数量
	UsedNamespaceNum         uint64 `json:"UsedNamespaceNum,omitnil" name:"UsedNamespaceNum"`   // 已使用命名空间数量
	MaxTopicNum              uint64 `json:"MaxTopicNum,omitnil" name:"MaxTopicNum"`             // 最大Topic数量
	UsedTopicNum             uint64 `json:"UsedTopicNum,omitnil" name:"UsedTopicNum"`           // 已使用Topic数量
	MaxGroupNum              uint64 `json:"MaxGroupNum,omitnil" name:"MaxGroupNum"`             // 最大Group数量
	UsedGroupNum             uint64 `json:"UsedGroupNum,omitnil" name:"UsedGroupNum"`           // 已使用Group数量
	MaxRetentionTime         uint64 `json:"MaxRetentionTime,omitnil" name:"MaxRetentionTime"`   // 消息最大保留时间，以毫秒为单位
	MaxLatencyTime           uint64 `json:"MaxLatencyTime,omitnil" name:"MaxLatencyTime"`       // 消息最长延时，以毫秒为单位
	MaxQueuesPerTopic        uint64 `json:"MaxQueuesPerTopic,omitnil" name:"MaxQueuesPerTopic"` // 单个主题最大队列数
}
